Wrap ComfortViewFactorAngles - #5650
Conversation
|
Um hang on, why is |
There was a problem hiding this comment.
🟡 Changes recommended
Version translation loses existing targets, and the wrapper omits valid target types while permitting inconsistent MRT state.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds model and EnergyPlus translation support for ComfortViewFactorAngles and related People MRT calculation modes.
Changes:
- Adds the new model object and bindings.
- Implements forward/reverse translation and tests.
- Moves the MRT target field to
PeopleDefinitionwith version translation.
File summaries
| File | Description |
|---|---|
src/osversion/VersionTranslator.cpp |
Migrates People fields to 3.12. |
src/osversion/test/VersionTranslator_GTest.cpp |
Tests People migration. |
src/osversion/test/3_12_0/test_vt_People.rb |
Generates migration fixture. |
src/osversion/test/3_12_0/test_vt_People.osm |
Provides 3.11 fixture data. |
src/model/test/People_GTest.cpp |
Tests new PeopleDefinition API. |
src/model/test/ComfortViewFactorAngles_GTest.cpp |
Tests angle-factor behavior. |
src/model/PeopleDefinition.hpp |
Exposes MRT target API. |
src/model/PeopleDefinition.cpp |
Implements MRT target handling. |
src/model/PeopleDefinition_Impl.hpp |
Declares internal target methods. |
src/model/People_Impl.hpp |
Removes obsolete TODO. |
src/model/ModelGeometry.i |
Adds bindings. |
src/model/Model.cpp |
Registers model constructors. |
src/model/ConcreteModelObjects.hpp |
Includes new model types. |
src/model/ComfortViewFactorAngles.hpp |
Defines the public model API. |
src/model/ComfortViewFactorAngles.cpp |
Implements angle-factor logic. |
src/model/ComfortViewFactorAngles_Impl.hpp |
Defines internal implementation API. |
src/model/CMakeLists.txt |
Builds model sources and tests. |
src/energyplus/Test/People_GTest.cpp |
Tests People translation modes. |
src/energyplus/Test/ComfortViewFactorAngles_GTest.cpp |
Tests object translation. |
src/energyplus/ReverseTranslator/ReverseTranslatePeople.cpp |
Imports MRT targets. |
src/energyplus/ReverseTranslator/ReverseTranslateComfortViewFactorAngles.cpp |
Imports angle-factor lists. |
src/energyplus/ReverseTranslator.hpp |
Declares reverse translation. |
src/energyplus/ReverseTranslator.cpp |
Dispatches reverse translation. |
src/energyplus/ForwardTranslator/ForwardTranslatePeople.cpp |
Exports People MRT settings. |
src/energyplus/ForwardTranslator/ForwardTranslateComfortViewFactorAngles.cpp |
Exports angle-factor lists. |
src/energyplus/ForwardTranslator.hpp |
Declares forward translation. |
src/energyplus/ForwardTranslator.cpp |
Dispatches forward translation. |
src/energyplus/CMakeLists.txt |
Builds translator sources and tests. |
resources/model/OpenStudio.idd |
Adds and relocates model fields. |
resources/energyplus/ProposedEnergy+.idd |
Updates the EnergyPlus schema. |
Review details
Suppressed comments (1)
src/model/PeopleDefinition.cpp:286
- This rejects valid direct targets supported by EnergyPlus.
Surface Name/Angle Factor List NameusesAllHeatTranAngFacNames, which includes fenestration and internal-mass objects as well as base surfaces and angle-factor lists (seeresources/energyplus/ProposedEnergy+.idd:7191-7193,8022-8023,11971-11973). Consequently reverse translation silently loses a validSubSurfaceorInternalMasstarget. Support the full target set rather than onlySurfaceandComfortViewFactorAngles.
if (modelObject.optionalCast<Surface>()) {
mrtType = "SurfaceWeighted";
} else if (modelObject.optionalCast<ComfortViewFactorAngles>()) {
mrtType = "AngleFactor";
} else {
LOG(Error, "Surface Name/Angle Factor List Name must reference a Surface or ComfortViewFactorAngles object.");
- Files reviewed: 30/30 changed files
- Comments generated: 4
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| } else if (i > 6) { | ||
| newObject.setString(i - 1, value.get()); |
| \reference AllHeatTranAngFacNames | ||
| A3, \field Surface 1 Name | ||
| \type object-list | ||
| \object-list SurfaceNames |
| if (result && istringEqual(mrtType, "EnclosureAveraged")) { | ||
| resetSurfaceNameAngleFactorListName(); |
Why? I think the specific surfaces are instance specific rather than definition-level, don't you? (Note: I didn't review the changes yet as I'm on a mobile device) As far as the IDD inconsistencies, that should be fixed upstream on EnergyPlus with a quick PR |
Require a name, declare the minimum field count, and document the enclosure requirement for referenced surfaces.
Validate surface space and thermal-zone assignments before adding angle factors, reject cross-zone lists, and align extensible-group update handling with ZoneMRTCalculation.
Revalidate every referenced surface's thermal zone before generating the EnergyPlus object and cover stale surface assignments in the forward-translator tests.
Reject non-finite angle factors and clear the MRT target when resetting the calculation type, with model regression coverage.
Move unambiguous 3.11 People MRT targets to PeopleDefinition during version translation, report shared-definition conflicts, and cover the migrated surface target.
Accept Surface, SubSurface, and InternalMass targets from AllHeatTranSurfNames, preserve same-zone validation, and cover model and EnergyPlus translation behavior.
0b23e76 to
f940f2e
Compare
🧪 Test Results DashboardSummary
❌ Significant Test Failures📊 Test Run Information
|
Pull request overview
EnclosureAveragedPeopletoPeople:DefinitionPull Request Author
src/model/test)src/energyplus/Test)src/osversion/VersionTranslator.cpp)Labels:
IDDChangeAPIChangePull Request - Ready for CIso that CI builds your PRReview Checklist
This will not be exhaustively relevant to every PR.